from sqlalchemy import create_engine
import matplotlib.pyplot as plt
import logging
import constant
from IndexDailyData import painter_index
from UsTycrData import query_us_tycr
"""
根据指数与美国债收益率曲线利率
画相关拆线图
测试得：
"""
# 日志
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('------------------ Start of program ---------------------')
# 初始化数据库连接:
engine = create_engine(
    constant.get_db_path(),
    max_overflow=0,   # 超过连接池大小外最多创建的连接数
    pool_size=5,      # 连接池大小
    pool_timeout=30,  # 连接池中没有线程最多等待时间，否则报错
    pool_recycle=-1,  # 多久之后对连接池中的连接进行回收（重置）-1不回收
)


"""
画图
"""


def painter_us_tycr(engine_, query_start_, query_end_):
    """
    美国债收益率曲线利率相关
    :param engine_:
    :param query_start_:
    :param query_end_:
    :return:
    """
    logging.debug('------------------- 获取数据开始 -------------------')
    us_tycr_list = query_us_tycr(engine_, query_start_, query_end_)
    logging.debug('------------------- 获取数据完成 -------------------')

    logging.debug('------------------- 画图开始 -------------------')
    plt.figure("美国债收益率曲线利率相关")  # 生成图形后的标题
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    x6_ = us_tycr_list.loc[:, 'month']  # 点的横坐标
    k6_ = us_tycr_list.loc[:, 'm0']  # 线6的纵坐标
    x7_ = us_tycr_list.loc[:, 'month']  # 点的横坐标
    k7_ = us_tycr_list.loc[:, 'm1']  # 线7的纵坐标
    x8_ = us_tycr_list.loc[:, 'month']  # 点的横坐标
    k8_ = us_tycr_list.loc[:, 'm2']  # 线7的纵坐标
    plt.plot(x6_, k6_, color='b', label="通货净额或现金", linewidth=1)
    plt.plot(x7_, k7_, color='r', label="狭义货币供应量", linewidth=1)
    plt.plot(x8_, k8_, color='g', label="广义货币供应量", linewidth=1)
    plt.xlabel("DATE")  # 横坐标名字
    plt.ylabel("美国债收益率曲线利率")  # 纵坐标名字
    plt.legend(loc="best")  # 图例
    plt.show()
    logging.debug('------------------- 画图结束  -------------------')

def muti_painter_index_us_tycr(engine_, query_start_, query_end_):
    logging.debug('------------------- 获取数据开始 -------------------')
    plt.figure("指数与美国债收益率曲线利率相关")  # 生成图形后的标题
    plt.subplot(211)
    plt.title('指数相关', fontsize=12)
    painter_index(engine_, query_start_, query_end_, plt)

    plt.subplot(212)
    plt.title('美国债收益率曲线利率相关', fontsize=12)
    us_tycr_list = query_us_tycr(engine_, query_start_, query_end_)
    x6_ = us_tycr_list.loc[:, 'date']  # 点的横坐标
    k6_ = us_tycr_list.loc[:, 'y1']  # 线6的纵坐标
    x7_ = us_tycr_list.loc[:, 'date']  # 点的横坐标
    k7_ = us_tycr_list.loc[:, 'y5']  # 线7的纵坐标
    x8_ = us_tycr_list.loc[:, 'date']  # 点的横坐标
    k8_ = us_tycr_list.loc[:, 'y10']  # 线7的纵坐标
    plt.plot(x6_, k6_, color='b', label="y1", linewidth=1)
    plt.plot(x7_, k7_, color='r', label="y5", linewidth=1)
    plt.plot(x8_, k8_, color='g', label="y10", linewidth=1)
    plt.xlabel("DATE", fontsize=8)  # 横坐标名字
    plt.ylabel("美国债收益率曲线利率", fontsize=8)  # 纵坐标名字
    plt.axis(['2010', '2022', -1, 5])
    # 设置坐标轴刻度标记的大小
    plt.tick_params(axis='both', labelsize=8)
    plt.legend(loc="best")  # 图例

    plt.tight_layout()  # 设置默认的间距，调整整体空白
    plt.subplots_adjust(wspace=0.5, hspace=0.5)  # 调整子图间距
    logging.debug('------------------- 画图结束  -------------------')
    plt.show()






query_start = '20100101'
query_end = '20210331'

# painter_index(engine)
# painter_shibor_lpr(engine, query_start, query_end)
muti_painter_index_us_tycr(engine, query_start, query_end)

